package com.usian.controller;


import com.alibaba.cloud.commons.lang.StringUtils;
import com.aliyun.oss.OSS;
import com.usian.realname.Realname;
import com.usian.square.Square;
import com.usian.user.User;
import com.usian.service.impl.UserService;
import com.usian.utils.AliyunOSSUtils;
import com.usian.vo.Result;
import com.usian.vo.Rs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;


@RestController
@RequestMapping("app/user")
public class UserController {


    @Autowired
    private UserService userService;

    @Autowired
    RedisTemplate redisTemplate;

    @Autowired
    private AliyunOSSUtils aliyunOSSUtils;




    //登录
    @RequestMapping("/login/{account}/{password}")
    public Result login(@PathVariable String account, @PathVariable String password) {

        // 2. 查询账号密码
        User user = new User();
        user.setAccount(account);
        user.setPassword(password);
        if (user.getAccount() == null || user.getPassword()==null ) {
            return Result.error("账号密码不存在");
        }
        User user1 = userService.login(user);
        if (user1==null) {
            return Result.error("账号或密码错误");
        }
        // 5. 返回成功结果
        return Result.success(user1);
    }

    // 注册
    @PostMapping("/logon")
    public Result logon(@RequestBody User user) {
        // 验证账号是否为空
        if (StringUtils.isEmpty(user.getAccount())) {
            return Result.error("账号不能为空");
        }
        // 验证密码是否为空
        if (StringUtils.isEmpty(user.getPassword())) {
            return Result.error("密码不能为空");
        }
        User user1 = userService.logon(user);
        if (user1 != null) {
            return Result.error("账号已存在");
        }
        return Result.success(user1);
    }

    @PostMapping("/upload")
    public Result upload(@RequestParam("img") MultipartFile file) throws IOException {
        // 获取文件名
        String filename = file.getOriginalFilename();
        // 获取io流
        InputStream inputStream = file.getInputStream();
        // 文件上传
        String fileUtils = aliyunOSSUtils.putObject(inputStream, filename);
        return Result.success(fileUtils);
    }


    @GetMapping("userInfo/{id}")
    public Result userInfo(@PathVariable Integer id) {
        User user = userService.selectById(id);
        return Result.success(user);
    }

    @RequestMapping("/userInfoEdit")
    public Result userInfoEdit(@RequestBody User user) {
        int i = userService.userInfoEdit(user);
        if (i > 0) {
            return Result.success();
        } else {
            return Result.error("修改失败");
        }
    }

    /**
     * 接口：通过用户id查找到帖子
     */
    @GetMapping("/selectUserPost/{id}")
    public Result selectUserPost(@PathVariable Integer id) {
        List<Square> square = userService.selectUserPost(id);
        return Result.success(square);
    }

    @GetMapping("/mypost/{id}")
    public Result mypost(@PathVariable Integer id) {
        // 调用userService的selectUserMypost方法，根据用户ID获取个人帖子数量
        Integer user = userService.selectUserMypost(id);
        // 返回成功结果，包含获取到的用户信息
        return Result.success(user);
    }

    @GetMapping("/deletePost/{id}")
    public Result deletePost(@PathVariable Integer id) {
        // 调用userService的deletePost方法，根据帖子ID删除帖子
        int i = userService.deletePost(id);
        // 如果删除成功，返回成功结果
        if (i > 0) {
            return Result.success();
        } else {
            // 如果删除失败，返回错误结果
            return Result.error("删除失败");
        }
    }


    @PostMapping("/realname")
    public Result realname(@RequestBody Realname realname) {
        // 根据用户提交的真实姓名和身份证号查询系统中是否已存在相同的认证信息
        List<Realname> cards = userService.realname(realname.getCard());

        // 如果查询结果为空，说明身份信息未被占用，可以进行认证
        if (cards.size() == 0){
            // 保存用户的身份信息到数据库
            userService.saverealname(realname.getUserId(),realname.getRealname(),realname.getCard());
            // 返回认证成功的结果和消息
            return Result.success("恭喜您，您的身份信息已经认证成功");
        }else {
            // 如果查询结果不为空，说明身份信息已被占用，返回错误消息提示用户
            return Result.error("身份信息已被占用，请您确认您的身份是否填写正确");
        }
    }

    @GetMapping("/selectRealname/{id}")
    public Result selectRealname(@PathVariable Integer id) {
        Realname realname = userService.selectRealname(id);
        return Result.success(realname);
    }


    /**
     * 接口：通过用户id查找到信誉分
     */
    @GetMapping("/selectUserLucky/{id}")
    public Result selectUserLucky(@PathVariable Integer id) {
        List<User> user = userService.selectUserLucky(id);
        return Result.success(user);
    }

    @GetMapping("/mylucky/{id}")
    public Result mylucky(@PathVariable Integer id) {
        // 调用userService的selectUserMyLucky方法，根据用户ID获取个人信誉分
        Integer user = userService.selectUserMyLucky(id);
        // 返回成功结果，包含获取到的用户信息
        return Result.success(user);
    }

    @GetMapping("/charisma/{id}")
    public Result charisma(@PathVariable Integer id) {
        // 调用userService的selectUserMyLucky方法，根据用户ID获取个人魅力值
        Integer user = userService.selectCharisma(id);
        // 返回成功结果，包含获取到的用户信息
        return Result.success(user);
    }



    @RequestMapping("/play/{id}/{charisma}")
    public Result play(@PathVariable Integer id, @PathVariable Integer charisma) {
        Integer i = userService.updateUserLucky(id, charisma);
        return Result.success(i);
    }





    /*
     *发送验证码
     */
    @RequestMapping("/sendCode/{account}")
    public Rs sendCode(@PathVariable String account, String code) throws Exception {
        return userService.sendCode(account, code);
    }













}



